<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class ImportarClientes extends CI_Controller {

    private $folder = "./application/uploads/";
    private $establecimiento;

    public function __construct() {
        parent::__construct();
        session_start();
        $this->estaLogueado();
        $this->load->model('_clientem');
        $this->load->model('paism');
        $this->establecimiento = $_SESSION["establecimiento"]["id_establecimiento"];
    }

    public function index() {
        $data = array();
        $this->loadData($data);
        $this->load->view('header', $data);
        $this->load->view('importarClientesV');
        $this->load->view('footer');
    }

    private function loadData(&$data) {
        $data["tab"] = "importarClientes";
        $this->getMensaje($data['mensaje']);
    }

    public function importar($tipo) {
        $fileName = $this->establecimiento . ".xls";
        $uploads = $this->folder . $fileName;
        //  var_dump($_FILES); //exit;
        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploads)) {
            //  echo "se ha subido el archivo correctamente";
            $this->loadInfo($uploads, $tipo);
            unlink($uploads);
        } else {
            $this->setMensaje("Ha ocurrido un error importando el archivo");
        }
    }

    private function loadInfo($file, $tipo) {
        $importados = 0;
        try {
            require './application/libraries/excel_reader/PHPExcel.php';
            header("Content-type: text/html; charset=utf-8");
            $excel = PHPExcel_IOFactory::load($file);
            $values = $excel->getActiveSheet()->toArray(null, true, true, true);
            $header = array_slice($values, 0, 1);
            if ($tipo == "persona") {

                if (!$this->validarArchivo($header[0])) {
                    $this->setMensaje("El archivo es inválido, por favor revise las cabeceras");
                    header("Location:../../importarClientes");
                }
                foreach (array_slice($values, 2) as $row) {
                    //   var_dump($row);
                    $this->escapar($row);
                    if (!$this->HayMasFilas($row))
                        break;
                    if (!$this->validRecordPersona($row['A'], $row['B'], $row['C'], $row['H'])) {
                        continue;
                    }
                    if ($this->existeCliente($row)) {
                        continue;
                    }

                    $cliente = array(
                        'id_tipo_cliente' => 1,
                        //'id_estado_civil' => 'null',
                        'id_establecimiento' => $this->establecimiento,
                        'email' => $row['F'],
                        'identificacion' => $row['A'],
                        'nombre' => $row['C'],
                        'primer_apellido' => $row['D'],
                        'segundo_apellido' => $row['E'],
                        'telefono' => $row['G'],
                        'genero' => $row['H'],
                        //'id_tipo_documento' => NULL,
                        'fecha_nacimiento' => $row['I'],
                        'id_pais' => $this->paism->obtenerId($row['B']),
                        'ocupacion' => $row['K']
                    );                  
                    $importados++;
                    $this->_clientem->crearCliente($cliente);
                }
                //  exit;
                $this->setMensaje("$importados clientes tipo persona importados correctamente");
                header("Location:../../importarClientes");
            } else {
            
                foreach (array_slice($values, 2) as $row) {
                    var_dump($row);
                    $this->escapar($row);
                    if (!$this->HayMasFilas($row)){                      
                        break;
                    }
                    if (!$this->validRecordEmpresa($row['A'], $row['B'], $row['C'])){                      
                        continue;
                    }
                        
                    if ($this->existeCliente($row)) {
                        continue;
                    }
                    $data = array(
                        'id_tipo_cliente' => 2,
                        //'id_estado_civil' => 'null',
                        'id_establecimiento' => $this->establecimiento,
                        'email' => $row['F'],
                        'identificacion' => $row['A'],
                        'nombre' => $row['C'],
                        'telefono' => $row['D'],
                        'id_pais' => $this->paism->obtenerId($row['B']),
                        'direccion' => $row['E'],
                    );

                    $this->_clientem->crearCliente($data);
                }
                $this->setMensaje("$importados clientes empresas importados correctamente");
                header("Location:../../importarClientes");
            }
        } catch (Exception $e) {
            $this->setMensaje("se ha generado una excepción: {$e->getMessage()}");
            header("Location:../importarClientes");
        }
    }

    private function validarArchivo($header, $tipo = 'persona') {
        $i = 'A';
        while (isset($header[$i]) && $this->valid_data($header[$i])) {
            $i++;
        }
        $i--;
        if (($tipo === 'persona' && $i === 'L') || ($tipo === 'empresa' && $i == 'G'))
            return true;

        return false;

        //  if($tipo==='persona' && $i=='')
    }

    private function validRecordPersona($documento, $nacionalidad, $nombre, $genero) {
        return $this->valid_data($documento) && $this->valid_data($nacionalidad) && $this->valid_data($nombre) && $this->paism->obtenerId($nacionalidad) != "" && $this->valid_data($genero);
    }

    private function validRecordEmpresa($identificacion, $nacionalidad, $nombre) {
        return $this->valid_data($identificacion) && $this->valid_data($nacionalidad) && $this->valid_data($nombre) &&$this->paism->obtenerId($nacionalidad) != "";
    }

    private function valid_data($data) {
        return $data != null && $data != '';
    }

    private function existeCliente($cliente) {
        $nacionalidad = $this->paism->obtenerId($cliente['B']);
        $cliente = $this->_clientem->getCliente($this->establecimiento, $cliente['A'], $nacionalidad);
        return $cliente ? true : false;
    }

    private function HayMasFilas($cliente) {
        $values = array_values($cliente);
        foreach ($values as $data) {
            if ($this->valid_data($data))
                return true;
        }
        return false;
    }

}
